#!/usr/bin/env python3
"""
角色菜单权限初始化脚本
"""

from app import create_app, db
from app.models.menu import Menu
from app.models.role import Role, RoleMenu

def init_role_menus():
    """初始化角色菜单权限关联"""
    app = create_app()
    
    with app.app_context():
        # 清除现有的角色菜单关联
        RoleMenu.query.delete()
        
        # 获取所有菜单
        all_menus = Menu.query.all()
        menu_ids = [menu.id for menu in all_menus]
        
        if not menu_ids:
            print("数据库中没有菜单数据，请先初始化菜单")
            return
        
        # 获取所有角色
        roles = Role.query.all()
        
        if not roles:
            print("数据库中没有角色数据，请先初始化角色")
            return
        
        print(f"找到 {len(menu_ids)} 个菜单")
        print(f"找到 {len(roles)} 个角色")
        
        for role in roles:
            print(f"\n为角色 '{role.name}' (ID: {role.id}) 分配菜单权限...")
            
            if role.id == 1:  # 超级管理员
                # 给超级管理员分配所有菜单权限
                assigned_menu_ids = menu_ids
                print(f"  分配所有 {len(assigned_menu_ids)} 个菜单")
            else:
                # 给其他角色分配部分菜单权限（示例：只给基础菜单）
                basic_menu_names = ['系统管理', '用户管理', '管理员管理', '用户列表']
                basic_menus = Menu.query.filter(Menu.name.in_(basic_menu_names)).all()
                assigned_menu_ids = [menu.id for menu in basic_menus]
                print(f"  分配基础菜单: {[menu.name for menu in basic_menus]}")
            
            # 创建角色菜单关联
            for menu_id in assigned_menu_ids:
                role_menu = RoleMenu(role_id=role.id, menu_id=menu_id)
                db.session.add(role_menu)
            
            print(f"  已为角色 '{role.name}' 分配 {len(assigned_menu_ids)} 个菜单权限")
        
        # 提交到数据库
        db.session.commit()
        print("\n角色菜单权限初始化完成！")
        
        # 显示分配结果
        print("\n权限分配结果:")
        for role in roles:
            role_menus = db.session.query(RoleMenu.menu_id).filter_by(role_id=role.id).all()
            menu_count = len(role_menus)
            print(f"角色 '{role.name}': {menu_count} 个菜单权限")

if __name__ == "__main__":
    init_role_menus() 